package org.study.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * Double 类型数据的运算工具类
 *
 * @author Administrator
 * @date 2021-05-12
 */
public class DoubleUtils {
    public static void main(String[] args) {

    }

    private DoubleUtils() {
        throw new AssertionError("不能实例化工具类！");
    }

    /**
     * 保留两位小数(舍去后面的不进位)
     *
     * @param value
     * @return
     */
    public static double formatDouble(double value) {
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
        return Double.valueOf(decimalFormat.format(value));
    }

    /**
     * 浮点数相减
     *
     * @param d1
     * @param d2
     * @return
     */
    public static double subDouble(double d1, double d2) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 浮点数相加
     *
     * @param d1
     * @param d2
     * @return
     */
    public static double addDouble(double d1, double d2) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.add(b2).doubleValue();
    }

    /**
     * 浮点数相乘
     *
     * @param d1
     * @param d2
     * @return
     */
    public static double mulDouble(double d1, double d2) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.multiply(b2).doubleValue();
    }

    /***
     * 浮点数相除
     * @param d1 被除数
     * @param d2 除数
     * @param scale 小数位数
     * @return
     */
    public static double divDouble(double d1, double d2, int scale) {
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.divide(b2, scale, RoundingMode.HALF_DOWN).doubleValue();
    }

    public static BigDecimal convert(float f) {
        Float temp = Float.valueOf(f);
        BigDecimal value = new BigDecimal(temp.toString());
        return value;
    }
}
